package com.zhx.basis.设计模式.中介者模式.demo1;

import com.zhx.basis.设计模式.中介者模式.demo1.mediator.Resources;
import com.zhx.basis.设计模式.中介者模式.demo1.mediator.SqlSession;
import com.zhx.basis.设计模式.中介者模式.demo1.mediator.SqlSessionFactory;
import com.zhx.basis.设计模式.中介者模式.demo1.mediator.SqlSessionFactoryBuilder;
import com.zhx.basis.设计模式.中介者模式.demo1.po.User;
import lombok.extern.slf4j.Slf4j;

import java.io.Reader;

@Slf4j
public class Main {


    public static void main(String[] args) {

        /**
         * 中介者模式，符合开闭和单一职责，包含mybatis的核心流程，目前一知半解，很有学习价值
         */
        String resource = "mybatis-config-datasource.xml";
        Reader reader;
        try {
//            获取到xml资源
            reader = Resources.getResourceAsReader(resource);
            //加载xml中的mysql配置以及sql语句的xml，封装为map，key为接口方法名，
            SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
            //创建对象，里边包含了执行jdbc的操作
            SqlSession session = sqlMapper.openSession();
            try {
                //这里有个中文包名会有个错误不影响使用
                User user = session.selectOne("com.zhx.basis.设计模式.中介者模式.demo1.dao.IUser.queryUserInfoById", 1L);
                System.out.println(user.toString());
            } finally {
                session.close();
                reader.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
